以太坊的系統經過 2015~2016 上線時期之後各種 DoS 與 DAO fork 各種混亂之後,人們不段思考如何規模化系統的服務。
如果看當時的 區塊燃氣上限 ,就也不過 3~4 百萬燃氣。以一個區塊 15 秒,一筆原生以太幣交易 21000 燃氣來算,每秒交易量(Transaction Per Second, TPS)不過就 10~13 筆交易。以信用卡的 Visa 網路來看,根據各種網路上找得到,外面流傳的數字,每秒交易量大概在 1000~65000 這個級距左右,著實比區塊鏈的大很多。
以今天主網路的 45,000,000 區塊燃氣上限來講,每秒交易量也不過提升到 140 。
「我想問一下衡量服務量的方式,到底要用什麼指標看才準?」特務 K 好奇。
交易可大可小,要看交易牽扯的運算是什麼種類,有多大。 ERC20 代幣的交易大概又是原生以太幣交易燃氣使用量的十倍。
在以太坊上,比較客觀的基準可能要看系統每秒提供的燃氣,也就是 區塊燃氣上限 除以出塊時間。
但若要和純支付服務的系統來比較,就會把區塊鏈系統的服務換算成純支付來看,是以人們有時會用 每秒交易量 這個指標來看。
人們當時想利用樂觀執行(Optimistic Execution)這個概念想辦法提升系統的交易量。主要是許多運算不一定要在點對點網路上發生,他們可以在「鏈下(Offchain)」,也就是不用走一般交易的生命週期,直接讓某個運算方算完提交計算結果。如果算錯了,可以到區塊鏈上重算,並以沒收運算方事先抵押的押金作為懲罰。
這樣子倚賴主網路作為仲裁機制的系統,人們稱為 「第二層(Layer 2)」系統 。照這個命名邏輯,主網路是相對來說的第一層。
知名的協定有狀態通道(State Channel, 2015)、電漿(Plasma, 2017)等。他們其實也是有更久遠的歷史演進而來的。
另外一種鏈下運算的思路是用零知識證明密碼學。雖然在比特幣時代已有相關構想的提出,但真正在效能上有真正進步的底層元件,在 2016 年由密碼學家 Jens Groth 發表,人稱 Groth16 的零知識證明密碼學。
早期的樂觀執行的提案有個問題是他們沒辦法可靠的檢查所有餘額是否正確。他們非常倚賴使用者關注自己資產的餘額有沒有被算錯,並自行提供檢舉。檢舉的運算也非常複雜,要針對不同的情境提出不同的檢舉模式。這造成這類型的提案,並沒有被採用。
在與第二層系統平行發展的,是人們稱為側鏈(Side Chain)的系統。側鏈看似有個主網上的合約,決定其鏈的共識,但真正有出塊權力的單位掌握在少數人上。他們能決定不出塊,或是河蟹他人。因為沒有任何運算檢查或懲罰機制,他們也能產出運算不正確的狀態根,這意思是他們有辦法一錢雙花,或是憑空印鈔。
一般對側鏈比較正面的評價是他們讓應用程式開發者先熟悉使用區塊鏈的感覺。側鏈一般有不錯的效能。
但側鏈儘管和第二層方案長得很像,卻並 沒有繼承主網的安全性 ,犧牲安全性與去中心化並非合格的規模化方案。
在 2019 年左右,人們開始嘗試一種叫做捲(Rollup)的東西。神秘的白帽駭客 barryWhiteHat 提出了一種用零知識證明快速驗證大量交易的做法。
應該說,白帽先生具體化了很多從零知識證明到變成可以用的系統中的很多細節。例如:藉由估計迴路中要使用多少雜湊函數運算,來得到最多能處理的交易數量等等。
但捲與早期的第二層系統的差異在於:利用交易的輸入資料(calldata)欄位,讓密碼學束縛(Commitment)所綁定的資料在第一層發布。有了綁定的資料,讓任何人,或同步主網的節點,能夠取得重製出當下所有人餘額的正確資料。這除了讓壓縮驗算可行之外,也讓樂觀驗算擺脫早期那種複雜的驗算規則,以及擺脫倚賴使用者去維護自己餘額的正確。
真正零知捲和樂觀捲要能被使用,要等 2017 年的拜占庭 Byzantium 升級,調低零知識證明所需的橢圓曲線運算燃氣成本,以及 2019 伊斯坦堡 Istanbul 升級,調低輸入資料的燃氣成本。
2020 年, Vitalik 發布 以捲為尊的升級路線 。因應捲的技術發展,人們可以把應用搬到第二層。在第二層,運算和儲存的需求其實會跑到鏈下,而第一層會消耗的資源剩下頻寬。因此升級策略調整成在第一層放棄以 CPU 或硬碟能力升級的策略,而是把精力放在增加更多「頻寬」的資源,來支持第二層的發展。
隨著捲的發展,許多名詞和做法也被標準化下來。我們簡單說明。
第二層系統有屬於自己的全域狀態,只有雜湊樹根會進到第一層。
他們有屬於自己的交易。
第二層有所謂的 排序器(Sequencer) ,作用有點像第一層的驗證者。他們負責打包使用者在第二層的交易,然後把交易資料發布到第一層上面。
零知捲大多會把產出驗算證明的工作分給另一個 證明器(Prover) 。第一層會有一個合約,專門收受交易資料與檢查證明。
因為產出證明可能需要一點時間,交易資料可能會先發布,證明過幾分鐘補上。
樂觀捲則沒有證明器這個設計,但可能會有社群自行維護的檢舉器(Watcher),檢查是否有錯誤的執行並檢舉。
一般來說,第二層系統會有個稱作「跨鏈橋(Bridge)」的合約。人們可以把幣從第一層打到第二層系統,做法是先把幣鎖在第一層的跨鏈橋合約中。第二層偵測到第一層的押金,會發行相應的餘額,這樣好像做成了一種餘額從第一層傳送到第二層的感覺。
第二層的排序器也有相關的機制讓使用者可以把幣從第二層運回第一層。
人們如果不信任第二層的排序器,有些系統也提供在第一層合約緊急撤出第二層資金的設計。
就寫作的時間,目前尚未有仍在營運且滿足所有安全條件的捲。例如:
這類專案就像是騎腳踏車裝了所謂的輔助輪一樣。
l2beat 是追蹤各種第二層專案的儀表板。他們檢驗了各種專案的安全假設並列出。 Nic 有一篇 專文 解析怎麼看這個儀表板。